#ifndef MODULE_HEADER_H
#define MODULE_HEADER_H

#include <QObject>
#include <QList>
#include <QString>

enum ModuleWindowType{ModuleType, PortType};

struct Module_Code
{
    QString module_code;
    QString user_code;
};

struct PortAttribute
{
    QString name;
    QString id;
    QString type;
};

struct ModuleAttribute
{
    QString module_name;
    QString module_type;
    QString module_class;
};

struct ModulePorts {
    QList<PortAttribute> Input_List;
    QList<PortAttribute> Output_List;
    QList<PortAttribute> InOut_List;

    void set_Input(PortAttribute input)
    { Input_List.append(input); }

    void set_Output(PortAttribute output)
    { Output_List.append(output); }

    void set_InOut(PortAttribute inout)
    { InOut_List.append(inout); }
};

//struct Module_Data
//{
//    enum ModuleType{isModule, isChildModule};

//    ModuleType type;

//    ModuleAttribute module_attribute;
//    ModulePorts ports;

//    Module_Code code;

//    QList<Module_Data *> child_module;

//    ///---------------------------------------------------------------
//    /// 获取数据

//    int get_input()
//    { return ports.Input_List.length(); }

//    int get_output()
//    { return ports.Output_List.length(); }

//    int get_inout()
//    { return ports.InOut_List.length(); }

//    int sum_portNumber()
//    { return get_input() + get_output() + get_inout(); }

//    QString get_module_name()
//    { return module_attribute.module_name; }

//    QString get_module_type()
//    { return module_attribute.module_type; }

//    QString get_module_class()
//    { return module_attribute.module_class; }

//    ///---------------------------------------------------------------
//    /// 写入数据

//    void set_input(PortAttribute pa)
//    { ports.set_Input(pa); }

//    void set_output(PortAttribute pa)
//    { ports.set_Output(pa); }

//    void set_inout(PortAttribute pa)
//    { ports.set_InOut(pa); }

//    void set_module_name(QString name)
//    { module_attribute.module_name = name; }

//    ///---------------------------------------------------------------
//};

class Module_Data
{
public:
    enum ModuleType{isModule, isChildModule};

    ModuleAttribute module_attribute;
    ModulePorts ports;

//    Module_Code code;
    QString code;

    QList<Module_Data *> child_module;

    ///---------------------------------------------------------------
    /// 获取数据

    int get_input()
    { return ports.Input_List.length(); }

    int get_output()
    { return ports.Output_List.length(); }

    int get_inout()
    { return ports.InOut_List.length(); }

    int sum_portNumber()
    { return get_input() + get_output() + get_inout(); }

    QString get_module_name()
    { return module_attribute.module_name; }

    QString get_module_type()
    { return module_attribute.module_type; }

    QString get_module_class()
    { return module_attribute.module_class; }

    ///---------------------------------------------------------------
    /// 写入数据

    void set_input(PortAttribute pa)
    { ports.set_Input(pa); }

    void set_output(PortAttribute pa)
    { ports.set_Output(pa); }

    void set_inout(PortAttribute pa)
    { ports.set_InOut(pa); }

    void set_module_name(QString name)
    { module_attribute.module_name = name; }

    ///---------------------------------------------------------------
};

#endif // MODULE_HEADER_H
